@echo off

:: 这个脚本用于实现安全地在cmd窗口中输入密码，并设置密码的值，调用方通过CALL命令调用此脚本，以实现密码字段变量的传递


:: 脚本参数说明
:: %~1: 输入密码时，密码前面的提示信息，默认为：Please enter the remote host login password
set PLACE_HOLDER="%~1"
if %PLACE_HOLDER% == "" (
	set PLACE_HOLDER="Please enter the remote host login password"
)
:: 脚本参数说明
:: %~2: 自定义密码变量的字段名，默认为：PASSWORD 
set CUSTOM_PASSWORD_FIELD_NAME="%~2"
if %CUSTOM_PASSWORD_FIELD_NAME% == "" (
	set CUSTOM_PASSWORD_FIELD_NAME="PASSWORD"
)
:: 通过powershell实现安全地输入密码
set "psCommand=powershell -Command "$pword = read-host '%PLACE_HOLDER:~1,-1%' -AsSecureString ; ^
$BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
:: 读取输入的密码，并将密码值赋值给自定义的变量，调用方通过CALL命令调用此脚本，可以实现将此密码字段变量和值传递到父脚本中
for /f "usebackq delims=" %%p in (`%psCommand%`) do set %CUSTOM_PASSWORD_FIELD_NAME:~1,-1%=%%p